16.9 Das »LinkLabel«-Steuerelement  
Aus dem Label-Steuerelement ist das LinkLabel-Steuerelement abgeleitet. Seine Aufgabe besteht darin, Hyperlinks aufzurufen. Zwischen einem LinkLabel und seiner Basisklasse Label besteht ein gravierender Unterschied: Ein LinkLabel kann fokussiert werden. Es reagiert deshalb nicht nur auf einen Mausklick, sondern auch auf die (Return)-Taste.
In der Eigenschaft Text wird eine Zeichenfolge eingetragen, die als Hyperlink standardmäßig in Blau angezeigt wird, aber mit LinkColor auch individuell eingestellt werden kann. Das Verhalten des Links (z. B. die Unterstreichung) kann über LinkBehavior beeinflusst werden. Standardmäßig orientiert sich das Steuerelement an den Systemeinstellungen, übernimmt also die Einstellungen des Internet Explorers.
Wir müssen dem Steuerelement natürlich mitteilen, welcher Link dargestellt werden soll. Dazu dient die Eigenschaft Links, die eine Referenz auf eine Auflistung vom Typ LinkCollection zurückgibt.
| Public ReadOnly Property Links As LinkLabel.LinkCollection
|
Da es sich um eine Auflistung handelt, liegt auch der Schluss nahe, dass sich hinter einem LinkLabel-Steuerelement mehrere Hyperlinks befinden können – und dieser Schluss ist richtig. Nehmen wir beispielsweise an, ein LinkLabel würde in einer Form die Beschriftung
Stan's Website / E-Mail an Stan
aufweisen. Der erste Eintrag (»Stan’s Website«) soll mit Stan’s Homepage verlinkt werden, der zweite (»E-Mail an Stan«) eine E-Mail an Stan schicken (dazu wird das Standardmailprogramm des Anwenders geöffnet und ein neues E-Mail-Dokument angezeigt, in das Stan’s Mailadresse übernommen wird). Es sind zwei Hyperlinks notwendig, um zu diesem Resultat zu kommen.
Beide Hyperlinks können mit der Add-Methode der LinkCollection wie folgt hinzugefügt werden:
| linkLabel1.Links.Add(0, 14, "http://www.stan.xyz")
|
| linkLabel1.Links.Add(17, 13, "mailto:my@friend.stan")
|
Die Parameter der Add-Methode fallen eine wenig aus dem ansonsten üblichen Rahmen, den wir von anderen Auflistungen gewohnt sind:
| Public Function Add(Integer, Integer, Object) As Link
|
Der erste Parameter gibt die Startposition an, ab welcher der Hyperlink erstellt wird, der zweite sagt, wie viele Zeichen ab der Startposition als Hyperlink angezeigt werden sollen. Die ersten 14 Zeichen der Beschriftung in unserem Beispiel bilden den Bereich des ersten Hyperlinks (was der Teilzeichenfolge Stan’s Website entspricht), die dem 17. Zeichen folgenden 13 Zeichen geben seine Mailadresse an (entsprechend der Zeichenfolge EMail an Stan).
| Hinweis
|
|
Überlappen sich Bereiche, wird ein Kompilierfehler ausgelöst. Werden einige Zeichen der LinkLabel-Beschriftung nicht von den angegebenen Zahlen erfasst, sind diese zur Laufzeit auch nicht als Link erkennbar.
|
Wird zur Laufzeit ein LinkLabel-Steuerelement angeklickt, wird das Ereignis LinkedClicked ausgelöst. Befindet sich hinter dem Steuerelement eine Webadresse, erwarten wir selbstverständlich, dass sich der standardmäßig eingerichtete Webbrowser mit der entsprechenden Seite öffnet. Um das zu erreichen, müssen wir uns der Klasse Process bedienen, die im Namespace System.Diagnostics definiert ist. Der statischen Methode Start der Klasse Process übergeben wir eine Zeichenfolge. Enthält diese die Angabe einer EXE-Datei, wird das entsprechende Programm gestartet, handelt es sich um einen Dokumentnamen, das mit diesem Dokumenttyp verbundene Programm. Die folgende Anweisung startet beispielsweise den Windows-Explorer:
| Process.Start("explorer.exe")
|
Übergeben wir die Adresse einer Webseite, wird automatisch der Webbrowser gestartet.
Um im Ereignis LinkedClicked den vom Anwender angeklickten Link zu erhalten, brauchen wir nur das dem Ereignishandler übergebene Args-Objekt vom Typ LinkLabelLinkClickedEventArgs abzufragen, das mit seiner Eigenschaft Link eine Referenz auf den angeklickten Link liefert. Wir müssen noch dessen Inhalt auswerten und können ihn als String der Start-Methode übergeben:
| Private Sub LinkLabel1_LinkClicked(ByVal sender As Object, _
|
| ByVal e As LinkLabelLinkClickedEventArgs) _
|
| Handles LinkLabel1.LinkClicked
|
| Process.Start(e.Link.LinkData)
|
| End Sub
|
Soll ein besuchter Link im Formular durch eine andere Farbe kenntlich gemacht werden, muss die Eigenschaft Visited des Link-Objekts auf True gesetzt werden. Der Link in der Form nimmt dann die unter VisitedLinkColor definierte Farbe an. Dazu muss der Ereignishandler noch um die folgende Anweisung ergänzt werden:
| linkLabel1.Links(linkLabel1.Links.IndexOf(e.Link)).Visited = True
|
Fassen wir nun den Code abschließend übersichtlich zusammen:
| ' ---------------------------------------------------------
|
| ' Beispiel: ...\Kapitel 16\LinkLabelDemo
|
| ' ---------------------------------------------------------
|
| Public Class Form1
|
| Private Sub Form1_Load(...) Handles MyBase.Load
|
| LinkLabel1.Links.Add(0, 14, "http://www.stan.xyz")
|
| LinkLabel1.Links.Add(17, 13, "mailto:my@friend.stan")
|
| End Sub
|
| Private Sub LinkLabel1_LinkClicked(...) _
|
| Handles LinkLabel1.LinkClicked
|
| Process.Start(e.Link.LinkData)
|
| LinkLabel1.Links( _
|
| LinkLabel1.Links.IndexOf(e.Link)).Visited = True
|
| End Sub
|
| End Class
|
 Hier klicken, um das Bild zu Vergrößern
Abbildung 16.13 Form des Beispiels »LinkLabelDemo«
|